// 创建Map
// 创建空Map
let person = new Map()
console.log("person:", person)
// person: Map(0) {}

// 创建带初始值的Map
let mySelf = new Map([
  ["name", "Dcsgo"],
  ["gender", "男"],
  ["web", "dcsgo.com.cn"]
])
console.log("mySelf:", mySelf)
// mySelf: Map(3) { 'name' => 'Dcsgo', 'gender' => '男', 'web' => 'dcsgo.com.cn' }

// 添加元素
mySelf.set("height", 180)
// 在Map中添加重复键会产生值的覆盖
mySelf.set("height", 200)
console.log("mySelf:", mySelf)
/*
mySelf: Map(4) {
  'name' => 'Dcsgo',
  'gender' => '男',
  'web' => 'dcsgo.com.cn',
  'height' => 200
}
*/

// 删除元素
mySelf.delete("web")
console.log("mySelf:", mySelf)
// mySelf: Map(3) { 'name' => 'Dcsgo', 'gender' => '男', 'height' => 200 }

// 检查Map中是否有指定键
console.log("mySelf.has('name'):", mySelf.has("name"))
// mySelf.has('name'): true

// 获取Map中的值
let myselfName = mySelf.get("name")
console.log("myselfName:", myselfName)

// 获取Map的大小
console.log("mySelf.size:", mySelf.size)
// mySelf.size: 3

// 将Map转换为数组
let arr = Array.from(mySelf)
console.log("arr:", arr)
// arr: [ [ 'name', 'Dcsgo' ], [ 'gender', '男' ], [ 'height', 200 ] ]

// 使用扩展运算符将Map转换为数组
let arr2 = [...mySelf]
console.log("arr2:", arr2)
// arr2: [ [ 'name', 'Dcsgo' ], [ 'gender', '男' ], [ 'height', 200 ] ]

// 使用for...of遍历Map
// 解构可以从数组或对象中提取值并赋给变量
// [key,value]就是一种解构语法
// 用于将Map集合中的键值对解构为key和value两个变量
console.log("for of mySelf:")
for (let [key, value] of mySelf) {
  console.log(key, ":", value)
}
/*
for of mySelf:
name : Dcsgo
gender : 男
height : 200
*/

console.log("forEach mySelf:")
// 使用forEach方法遍历Map集合的键值对
mySelf.forEach((value, key) => console.log(key, ":", value))
/*
forEach mySelf:
name : Dcsgo
gender : 男
height : 200
*/

// 清空Map
mySelf.clear()
console.log("mySelf:", mySelf)
// mySelf: Map(0) {}